/*! \file BaseFileSystem.h
 *	\brief <write description for BaseFileSystem.h>
 *
 *	created:	2010/07/27
 *	created:	27:7:2010   15:29
 *	filename: 	C:\src\tactics-engine\libs\io\BaseFileSystem.h
 *	file path:	C:\src\tactics-engine\libs\io
 *	file base:	BaseFileSystem
 *	file ext:	h
 *	author:		Vitalii Trubchaninov
 *				venngraydog@gmail.com
 */

#ifndef _io_BASEFILESYSTEM_H_
#define _io_BASEFILESYSTEM_H_

#pragma once

#include <core/SmartPtr.h>
#include <core/String.h>
#include <io/BaseIStream.h>
#include <io/BaseOStream.h>

#include "Path.h"

namespace tt{
namespace io{

class BaseFileSystem : NonCopyable
{
public:
	BaseFileSystem();
	virtual ~BaseFileSystem();

	SharedPtr<BaseIStream> GetIStream(const Path&);
	SharedPtr<BaseOStream> GetOStream(const Path&);

	Bool IsExists(const Path&);

protected:
	virtual SharedPtr<BaseIStream> OnGetIStream(const Path&) = 0;
	virtual SharedPtr<BaseOStream> OnGetOStream(const Path&) = 0;

	virtual Bool OnIsExists(const Path&) = 0;
};

} //namespace io
} //namespace tt

#endif //_io_BASEFILESYSTEM_H_